#!/usr/bin/env ruby

# Error codes are taken from /usr/include/sysexits.h

require 'opal/cli_options'
options = Opal::CLIOptions.new
begin
  options.parse!
rescue OptionParser::InvalidOption => e
  $stderr.puts "#{$0}: #{e.message} (-h will show valid options)"
  exit 64
end

require 'opal/cli'
options_hash = options.options
options_hash.merge!(argv: ARGV.dup) unless options_hash[:lib_only]
cli = Opal::CLI.new options_hash

begin
  cli.run
  exit cli.exit_status || 0
rescue Opal::CliRunners::RunnerError => e
  $stderr.puts e.message
  exit 72
rescue SignalException => e
  raise unless e.message == 'SIGUSR2'

  exec($0, *ARGV)
end
